Autogenerated HTML docs for v2.4.0-rc0 
diff --git a/RelNotes/2.4.0.txt b/RelNotes/2.4.0.txt index 386c75d..53c9127 100644 --- a/RelNotes/2.4.0.txt +++ b/RelNotes/2.4.0.txt 
@@ -186,6 +186,11 @@  finish) and also add code to prevent such abuse in the run-command  helper.   + * People often forget to chain the commands in their test together + with &&, leaving a failure from an earlier command in the test go + unnoticed. The new GIT_TEST_CHAIN_LINT mechanism allows you to + catch such a mistake more easily. +    Also contains various documentation updates and code clean-ups.   @@ -464,3 +469,5 @@  (merge 7032054 nd/doc-git-index-version later to maint).  (merge e869c5e tg/test-index-v4 later to maint).  (merge 599d223 jk/simplify-csum-file-sha1fd-check later to maint). + (merge 260d585 sg/completion-gitcomp-nl-for-refs later to maint). + (merge 777c55a jc/report-path-error-to-dir later to maint). 
diff --git a/howto-index.html b/howto-index.html index d6cb2ee..9eec11e 100644 --- a/howto-index.html +++ b/howto-index.html 
@@ -883,7 +883,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:10 PST  +Last updated 2015-03-26 13:52:17 PDT   </div>   </div>   </body>  
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index 6a1fd18..465e211 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html 
@@ -936,7 +936,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:16 PST  +Last updated 2015-03-26 13:52:22 PDT   </div>   </div>   </body>  
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index 9e37e79..da0e401 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html 
@@ -1433,7 +1433,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:16 PST  +Last updated 2015-03-26 13:52:23 PDT   </div>   </div>   </body>  
diff --git a/howto/new-command.html b/howto/new-command.html index 743beb5..469613d 100644 --- a/howto/new-command.html +++ b/howto/new-command.html 
@@ -859,7 +859,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:12 PST  +Last updated 2015-03-26 13:52:19 PDT   </div>   </div>   </body>  
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 9e56258..806c432 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html 
@@ -893,7 +893,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:16 PST  +Last updated 2015-03-26 13:52:22 PDT   </div>   </div>   </body>  
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index ef6f9d0..98aefbf 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html 
@@ -845,7 +845,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:16 PST  +Last updated 2015-03-26 13:52:22 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index b3e809a..c167633 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html 
@@ -878,7 +878,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:15 PST  +Last updated 2015-03-26 13:52:22 PDT   </div>   </div>   </body>  
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index 9935321..4cfc5c4 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html 
@@ -953,7 +953,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:15 PST  +Last updated 2015-03-26 13:52:22 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 035f8cf..7a8d3d0 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html 
@@ -1023,7 +1023,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:15 PST  +Last updated 2015-03-26 13:52:21 PDT   </div>   </div>   </body>  
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 0cc6407..9926b7a 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html 
@@ -905,7 +905,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:12 PST  +Last updated 2015-03-26 13:52:19 PDT   </div>   </div>   </body>  
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index cedcc64..7be8650 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html 
@@ -839,7 +839,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:14 PST  +Last updated 2015-03-26 13:52:21 PDT   </div>   </div>   </body>  
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index dbd0560..307d2a6 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html 
@@ -1069,7 +1069,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:14 PST  +Last updated 2015-03-26 13:52:21 PDT   </div>   </div>   </body>  
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index a07d6c9..130b7e0 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html 
@@ -928,7 +928,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:14 PST  +Last updated 2015-03-26 13:52:20 PDT   </div>   </div>   </body>  
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index e7aa9ab..549507d 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html 
@@ -789,7 +789,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:13 PST  +Last updated 2015-03-26 13:52:20 PDT   </div>   </div>   </body>  
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index 908b334..381202e 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html 
@@ -846,7 +846,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:13 PST  +Last updated 2015-03-26 13:52:19 PDT   </div>   </div>   </body>  
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index 057890e..936cbfd 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html 
@@ -950,7 +950,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-05 13:51:13 PST  +Last updated 2015-03-26 13:52:20 PDT   </div>   </div>   </body>  
diff --git a/technical/api-index.html b/technical/api-index.html index c9cb464..5bd8bc9 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -898,7 +898,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2015-02-25 15:55:40 PST  +Last updated 2015-03-26 13:52:31 PDT   </div>   </div>   </body>  
diff --git a/technical/api-strbuf.html b/technical/api-strbuf.html deleted file mode 100644 index f931c5b..0000000 --- a/technical/api-strbuf.html +++ /dev/null 
@@ -1,1350 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  - "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  -<head>  -<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />  -<meta name="generator" content="AsciiDoc 8.6.9" />  -<title>strbuf API</title>  -<style type="text/css">  -/* Shared CSS for AsciiDoc xhtml11 and html5 backends */  -  -/* Default font. */  -body {  - font-family: Georgia,serif;  -}  -  -/* Title font. */  -h1, h2, h3, h4, h5, h6,  -div.title, caption.title,  -thead, p.table.header,  -#toctitle,  -#author, #revnumber, #revdate, #revremark,  -#footer {  - font-family: Arial,Helvetica,sans-serif;  -}  -  -body {  - margin: 1em 5% 1em 5%;  -}  -  -a {  - color: blue;  - text-decoration: underline;  -}  -a:visited {  - color: fuchsia;  -}  -  -em {  - font-style: italic;  - color: navy;  -}  -  -strong {  - font-weight: bold;  - color: #083194;  -}  -  -h1, h2, h3, h4, h5, h6 {  - color: #527bbd;  - margin-top: 1.2em;  - margin-bottom: 0.5em;  - line-height: 1.3;  -}  -  -h1, h2, h3 {  - border-bottom: 2px solid silver;  -}  -h2 {  - padding-top: 0.5em;  -}  -h3 {  - float: left;  -}  -h3 + * {  - clear: left;  -}  -h5 {  - font-size: 1.0em;  -}  -  -div.sectionbody {  - margin-left: 0;  -}  -  -hr {  - border: 1px solid silver;  -}  -  -p {  - margin-top: 0.5em;  - margin-bottom: 0.5em;  -}  -  -ul, ol, li > p {  - margin-top: 0;  -}  -ul > li { color: #aaa; }  -ul > li > * { color: black; }  -  -.monospaced, code, pre {  - font-family: "Courier New", Courier, monospace;  - font-size: inherit;  - color: navy;  - padding: 0;  - margin: 0;  -}  -pre {  - white-space: pre-wrap;  -}  -  -#author {  - color: #527bbd;  - font-weight: bold;  - font-size: 1.1em;  -}  -#email {  -}  -#revnumber, #revdate, #revremark {  -}  -  -#footer {  - font-size: small;  - border-top: 2px solid silver;  - padding-top: 0.5em;  - margin-top: 4.0em;  -}  -#footer-text {  - float: left;  - padding-bottom: 0.5em;  -}  -#footer-badges {  - float: right;  - padding-bottom: 0.5em;  -}  -  -#preamble {  - margin-top: 1.5em;  - margin-bottom: 1.5em;  -}  -div.imageblock, div.exampleblock, div.verseblock,  -div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,  -div.admonitionblock {  - margin-top: 1.0em;  - margin-bottom: 1.5em;  -}  -div.admonitionblock {  - margin-top: 2.0em;  - margin-bottom: 2.0em;  - margin-right: 10%;  - color: #606060;  -}  -  -div.content { /* Block element content. */  - padding: 0;  -}  -  -/* Block element titles. */  -div.title, caption.title {  - color: #527bbd;  - font-weight: bold;  - text-align: left;  - margin-top: 1.0em;  - margin-bottom: 0.5em;  -}  -div.title + * {  - margin-top: 0;  -}  -  -td div.title:first-child {  - margin-top: 0.0em;  -}  -div.content div.title:first-child {  - margin-top: 0.0em;  -}  -div.content + div.title {  - margin-top: 0.0em;  -}  -  -div.sidebarblock > div.content {  - background: #ffffee;  - border: 1px solid #dddddd;  - border-left: 4px solid #f0f0f0;  - padding: 0.5em;  -}  -  -div.listingblock > div.content {  - border: 1px solid #dddddd;  - border-left: 5px solid #f0f0f0;  - background: #f8f8f8;  - padding: 0.5em;  -}  -  -div.quoteblock, div.verseblock {  - padding-left: 1.0em;  - margin-left: 1.0em;  - margin-right: 10%;  - border-left: 5px solid #f0f0f0;  - color: #888;  -}  -  -div.quoteblock > div.attribution {  - padding-top: 0.5em;  - text-align: right;  -}  -  -div.verseblock > pre.content {  - font-family: inherit;  - font-size: inherit;  -}  -div.verseblock > div.attribution {  - padding-top: 0.75em;  - text-align: left;  -}  -/* DEPRECATED: Pre version 8.2.7 verse style literal block. */  -div.verseblock + div.attribution {  - text-align: left;  -}  -  -div.admonitionblock .icon {  - vertical-align: top;  - font-size: 1.1em;  - font-weight: bold;  - text-decoration: underline;  - color: #527bbd;  - padding-right: 0.5em;  -}  -div.admonitionblock td.content {  - padding-left: 0.5em;  - border-left: 3px solid #dddddd;  -}  -  -div.exampleblock > div.content {  - border-left: 3px solid #dddddd;  - padding-left: 0.5em;  -}  -  -div.imageblock div.content { padding-left: 0; }  -span.image img { border-style: none; vertical-align: text-bottom; }  -a.image:visited { color: white; }  -  -dl {  - margin-top: 0.8em;  - margin-bottom: 0.8em;  -}  -dt {  - margin-top: 0.5em;  - margin-bottom: 0;  - font-style: normal;  - color: navy;  -}  -dd > *:first-child {  - margin-top: 0.1em;  -}  -  -ul, ol {  - list-style-position: outside;  -}  -ol.arabic {  - list-style-type: decimal;  -}  -ol.loweralpha {  - list-style-type: lower-alpha;  -}  -ol.upperalpha {  - list-style-type: upper-alpha;  -}  -ol.lowerroman {  - list-style-type: lower-roman;  -}  -ol.upperroman {  - list-style-type: upper-roman;  -}  -  -div.compact ul, div.compact ol,  -div.compact p, div.compact p,  -div.compact div, div.compact div {  - margin-top: 0.1em;  - margin-bottom: 0.1em;  -}  -  -tfoot {  - font-weight: bold;  -}  -td > div.verse {  - white-space: pre;  -}  -  -div.hdlist {  - margin-top: 0.8em;  - margin-bottom: 0.8em;  -}  -div.hdlist tr {  - padding-bottom: 15px;  -}  -dt.hdlist1.strong, td.hdlist1.strong {  - font-weight: bold;  -}  -td.hdlist1 {  - vertical-align: top;  - font-style: normal;  - padding-right: 0.8em;  - color: navy;  -}  -td.hdlist2 {  - vertical-align: top;  -}  -div.hdlist.compact tr {  - margin: 0;  - padding-bottom: 0;  -}  -  -.comment {  - background: yellow;  -}  -  -.footnote, .footnoteref {  - font-size: 0.8em;  -}  -  -span.footnote, span.footnoteref {  - vertical-align: super;  -}  -  -#footnotes {  - margin: 20px 0 20px 0;  - padding: 7px 0 0 0;  -}  -  -#footnotes div.footnote {  - margin: 0 0 5px 0;  -}  -  -#footnotes hr {  - border: none;  - border-top: 1px solid silver;  - height: 1px;  - text-align: left;  - margin-left: 0;  - width: 20%;  - min-width: 100px;  -}  -  -div.colist td {  - padding-right: 0.5em;  - padding-bottom: 0.3em;  - vertical-align: top;  -}  -div.colist td img {  - margin-top: 0.3em;  -}  -  -@media print {  - #footer-badges { display: none; }  -}  -  -#toc {  - margin-bottom: 2.5em;  -}  -  -#toctitle {  - color: #527bbd;  - font-size: 1.1em;  - font-weight: bold;  - margin-top: 1.0em;  - margin-bottom: 0.1em;  -}  -  -div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  - margin-top: 0;  - margin-bottom: 0;  -}  -div.toclevel2 {  - margin-left: 2em;  - font-size: 0.9em;  -}  -div.toclevel3 {  - margin-left: 4em;  - font-size: 0.9em;  -}  -div.toclevel4 {  - margin-left: 6em;  - font-size: 0.9em;  -}  -  -span.aqua { color: aqua; }  -span.black { color: black; }  -span.blue { color: blue; }  -span.fuchsia { color: fuchsia; }  -span.gray { color: gray; }  -span.green { color: green; }  -span.lime { color: lime; }  -span.maroon { color: maroon; }  -span.navy { color: navy; }  -span.olive { color: olive; }  -span.purple { color: purple; }  -span.red { color: red; }  -span.silver { color: silver; }  -span.teal { color: teal; }  -span.white { color: white; }  -span.yellow { color: yellow; }  -  -span.aqua-background { background: aqua; }  -span.black-background { background: black; }  -span.blue-background { background: blue; }  -span.fuchsia-background { background: fuchsia; }  -span.gray-background { background: gray; }  -span.green-background { background: green; }  -span.lime-background { background: lime; }  -span.maroon-background { background: maroon; }  -span.navy-background { background: navy; }  -span.olive-background { background: olive; }  -span.purple-background { background: purple; }  -span.red-background { background: red; }  -span.silver-background { background: silver; }  -span.teal-background { background: teal; }  -span.white-background { background: white; }  -span.yellow-background { background: yellow; }  -  -span.big { font-size: 2em; }  -span.small { font-size: 0.6em; }  -  -span.underline { text-decoration: underline; }  -span.overline { text-decoration: overline; }  -span.line-through { text-decoration: line-through; }  -  -div.unbreakable { page-break-inside: avoid; }  -  -  -/*  - * xhtml11 specific  - *  - * */  -  -div.tableblock {  - margin-top: 1.0em;  - margin-bottom: 1.5em;  -}  -div.tableblock > table {  - border: 3px solid #527bbd;  -}  -thead, p.table.header {  - font-weight: bold;  - color: #527bbd;  -}  -p.table {  - margin-top: 0;  -}  -/* Because the table frame attribute is overriden by CSS in most browsers. */  -div.tableblock > table[frame="void"] {  - border-style: none;  -}  -div.tableblock > table[frame="hsides"] {  - border-left-style: none;  - border-right-style: none;  -}  -div.tableblock > table[frame="vsides"] {  - border-top-style: none;  - border-bottom-style: none;  -}  -  -  -/*  - * html5 specific  - *  - * */  -  -table.tableblock {  - margin-top: 1.0em;  - margin-bottom: 1.5em;  -}  -thead, p.tableblock.header {  - font-weight: bold;  - color: #527bbd;  -}  -p.tableblock {  - margin-top: 0;  -}  -table.tableblock {  - border-width: 3px;  - border-spacing: 0px;  - border-style: solid;  - border-color: #527bbd;  - border-collapse: collapse;  -}  -th.tableblock, td.tableblock {  - border-width: 1px;  - padding: 4px;  - border-style: solid;  - border-color: #527bbd;  -}  -  -table.tableblock.frame-topbot {  - border-left-style: hidden;  - border-right-style: hidden;  -}  -table.tableblock.frame-sides {  - border-top-style: hidden;  - border-bottom-style: hidden;  -}  -table.tableblock.frame-none {  - border-style: hidden;  -}  -  -th.tableblock.halign-left, td.tableblock.halign-left {  - text-align: left;  -}  -th.tableblock.halign-center, td.tableblock.halign-center {  - text-align: center;  -}  -th.tableblock.halign-right, td.tableblock.halign-right {  - text-align: right;  -}  -  -th.tableblock.valign-top, td.tableblock.valign-top {  - vertical-align: top;  -}  -th.tableblock.valign-middle, td.tableblock.valign-middle {  - vertical-align: middle;  -}  -th.tableblock.valign-bottom, td.tableblock.valign-bottom {  - vertical-align: bottom;  -}  -  -  -/*  - * manpage specific  - *  - * */  -  -body.manpage h1 {  - padding-top: 0.5em;  - padding-bottom: 0.5em;  - border-top: 2px solid silver;  - border-bottom: 2px solid silver;  -}  -body.manpage h2 {  - border-style: none;  -}  -body.manpage div.sectionbody {  - margin-left: 3em;  -}  -  -@media print {  - body.manpage div#toc { display: none; }  -}  -  -  -</style>  -<script type="text/javascript">  -/*<![CDATA[*/  -var asciidoc = { // Namespace.  -  -/////////////////////////////////////////////////////////////////////  -// Table Of Contents generator  -/////////////////////////////////////////////////////////////////////  -  -/* Author: Mihai Bazon, September 2002  - * http://students.infoiasi.ro/~mishoo  - *  - * Table Of Content generator  - * Version: 0.4  - *  - * Feel free to use this script under the terms of the GNU General Public  - * License, as long as you do not remove or alter this notice.  - */  -  - /* modified by Troy D. Hanson, September 2006. License: GPL */  - /* modified by Stuart Rackham, 2006, 2009. License: GPL */  -  -// toclevels = 1..4.  -toc: function (toclevels) {  -  - function getText(el) {  - var text = "";  - for (var i = el.firstChild; i != null; i = i.nextSibling) {  - if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.  - text += i.data;  - else if (i.firstChild != null)  - text += getText(i);  - }  - return text;  - }  -  - function TocEntry(el, text, toclevel) {  - this.element = el;  - this.text = text;  - this.toclevel = toclevel;  - }  -  - function tocEntries(el, toclevels) {  - var result = new Array;  - var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');  - // Function that scans the DOM tree for header elements (the DOM2  - // nodeIterator API would be a better technique but not supported by all  - // browsers).  - var iterate = function (el) {  - for (var i = el.firstChild; i != null; i = i.nextSibling) {  - if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {  - var mo = re.exec(i.tagName);  - if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {  - result[result.length] = new TocEntry(i, getText(i), mo[1]-1);  - }  - iterate(i);  - }  - }  - }  - iterate(el);  - return result;  - }  -  - var toc = document.getElementById("toc");  - if (!toc) {  - return;  - }  -  - // Delete existing TOC entries in case we're reloading the TOC.  - var tocEntriesToRemove = [];  - var i;  - for (i = 0; i < toc.childNodes.length; i++) {  - var entry = toc.childNodes[i];  - if (entry.nodeName.toLowerCase() == 'div'  - && entry.getAttribute("class")  - && entry.getAttribute("class").match(/^toclevel/))  - tocEntriesToRemove.push(entry);  - }  - for (i = 0; i < tocEntriesToRemove.length; i++) {  - toc.removeChild(tocEntriesToRemove[i]);  - }  -  - // Rebuild TOC entries.  - var entries = tocEntries(document.getElementById("content"), toclevels);  - for (var i = 0; i < entries.length; ++i) {  - var entry = entries[i];  - if (entry.element.id == "")  - entry.element.id = "_toc_" + i;  - var a = document.createElement("a");  - a.href = "#" + entry.element.id;  - a.appendChild(document.createTextNode(entry.text));  - var div = document.createElement("div");  - div.appendChild(a);  - div.className = "toclevel" + entry.toclevel;  - toc.appendChild(div);  - }  - if (entries.length == 0)  - toc.parentNode.removeChild(toc);  -},  -  -  -/////////////////////////////////////////////////////////////////////  -// Footnotes generator  -/////////////////////////////////////////////////////////////////////  -  -/* Based on footnote generation code from:  - * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html  - */  -  -footnotes: function () {  - // Delete existing footnote entries in case we're reloading the footnodes.  - var i;  - var noteholder = document.getElementById("footnotes");  - if (!noteholder) {  - return;  - }  - var entriesToRemove = [];  - for (i = 0; i < noteholder.childNodes.length; i++) {  - var entry = noteholder.childNodes[i];  - if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")  - entriesToRemove.push(entry);  - }  - for (i = 0; i < entriesToRemove.length; i++) {  - noteholder.removeChild(entriesToRemove[i]);  - }  -  - // Rebuild footnote entries.  - var cont = document.getElementById("content");  - var spans = cont.getElementsByTagName("span");  - var refs = {};  - var n = 0;  - for (i=0; i<spans.length; i++) {  - if (spans[i].className == "footnote") {  - n++;  - var note = spans[i].getAttribute("data-note");  - if (!note) {  - // Use [\s\S] in place of . so multi-line matches work.  - // Because JavaScript has no s (dotall) regex flag.  - note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  - spans[i].innerHTML =  - "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  - "' title='View footnote' class='footnote'>" + n + "</a>]";  - spans[i].setAttribute("data-note", note);  - }  - noteholder.innerHTML +=  - "<div class='footnote' id='_footnote_" + n + "'>" +  - "<a href='#_footnoteref_" + n + "' title='Return to text'>" +  - n + "</a>. " + note + "</div>";  - var id =spans[i].getAttribute("id");  - if (id != null) refs["#"+id] = n;  - }  - }  - if (n == 0)  - noteholder.parentNode.removeChild(noteholder);  - else {  - // Process footnoterefs.  - for (i=0; i<spans.length; i++) {  - if (spans[i].className == "footnoteref") {  - var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");  - href = href.match(/#.*/)[0]; // Because IE return full URL.  - n = refs[href];  - spans[i].innerHTML =  - "[<a href='#_footnote_" + n +  - "' title='View footnote' class='footnote'>" + n + "</a>]";  - }  - }  - }  -},  -  -install: function(toclevels) {  - var timerId;  -  - function reinstall() {  - asciidoc.footnotes();  - if (toclevels) {  - asciidoc.toc(toclevels);  - }  - }  -  - function reinstallAndRemoveTimer() {  - clearInterval(timerId);  - reinstall();  - }  -  - timerId = setInterval(reinstall, 500);  - if (document.addEventListener)  - document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);  - else  - window.onload = reinstallAndRemoveTimer;  -}  -  -}  -asciidoc.install();  -/*]]>*/  -</script>  -</head>  -<body class="article">  -<div id="header">  -<h1>strbuf API</h1>  -</div>  -<div id="content">  -<div id="preamble">  -<div class="sectionbody">  -<div class="paragraph"><p>strbuf&#8217;s are meant to be used with all the usual C string and memory  -APIs. Given that the length of the buffer is known, it&#8217;s often better to  -use the mem* functions than a str* one (memchr vs. strchr e.g.).  -Though, one has to be careful about the fact that str* functions often  -stop on NULs and that strbufs may have embedded NULs.</p></div>  -<div class="paragraph"><p>A strbuf is NUL terminated for convenience, but no function in the  -strbuf API actually relies on the string being free of NULs.</p></div>  -<div class="paragraph"><p>strbufs have some invariants that are very important to keep in mind:</p></div>  -<div class="olist arabic"><ol class="arabic">  -<li>  -<p>  -The <code>buf</code> member is never NULL, so it can be used in any usual C  -string operations safely. strbuf&#8217;s <em>have</em> to be initialized either by  -<code>strbuf_init()</code> or by <code>= STRBUF_INIT</code> before the invariants, though.  -</p>  -<div class="paragraph"><p>Do <strong>not</strong> assume anything on what <code>buf</code> really is (e.g. if it is  -allocated memory or not), use <code>strbuf_detach()</code> to unwrap a memory  -buffer from its strbuf shell in a safe way. That is the sole supported  -way. This will give you a malloced buffer that you can later <code>free()</code>.</p></div>  -<div class="paragraph"><p>However, it is totally safe to modify anything in the string pointed by  -the <code>buf</code> member, between the indices <code>0</code> and <code>len-1</code> (inclusive).</p></div>  -</li>  -<li>  -<p>  -The <code>buf</code> member is a byte array that has at least <code>len + 1</code> bytes  - allocated. The extra byte is used to store a <code>'\0'</code>, allowing the  - <code>buf</code> member to be a valid C-string. Every strbuf function ensure this  - invariant is preserved.  -</p>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Note</div>  -</td>  -<td class="content">It is OK to "play" with the buffer directly if you work it this  - way:</td>  -</tr></table>  -</div>  -<div class="listingblock">  -<div class="content">  -<pre><code>strbuf_grow(sb, SOME_SIZE); <b>&lt;1&gt;</b>  -strbuf_setlen(sb, sb-&gt;len + SOME_OTHER_SIZE);</code></pre>  -</div></div>  -<div class="colist arabic"><ol>  -<li>  -<p>  -Here, the memory array starting at <code>sb-&gt;buf</code>, and of length  -<code>strbuf_avail(sb)</code> is all yours, and you can be sure that  -<code>strbuf_avail(sb)</code> is at least <code>SOME_SIZE</code>.  -</p>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Note</div>  -</td>  -<td class="content"><code>SOME_OTHER_SIZE</code> must be smaller or equal to <code>strbuf_avail(sb)</code>.</td>  -</tr></table>  -</div>  -<div class="paragraph"><p>Doing so is safe, though if it has to be done in many places, adding the  -missing API to the strbuf module is the way to go.</p></div>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Warning</div>  -</td>  -<td class="content">Do <em>not</em> assume that the area that is yours is of size <code>alloc  -- 1</code> even if it&#8217;s true in the current implementation. Alloc is somehow a  -"private" member that should not be messed with. Use <code>strbuf_avail()</code>  -instead.</td>  -</tr></table>  -</div>  -</li>  -</ol></div>  -</li>  -</ol></div>  -</div>  -</div>  -<div class="sect1">  -<h2 id="_data_structures">Data structures</h2>  -<div class="sectionbody">  -<div class="ulist"><ul>  -<li>  -<p>  -<code>struct strbuf</code>  -</p>  -</li>  -</ul></div>  -<div class="paragraph"><p>This is the string buffer structure. The <code>len</code> member can be used to  -determine the current length of the string, and <code>buf</code> member provides  -access to the string itself.</p></div>  -</div>  -</div>  -<div class="sect1">  -<h2 id="_functions">Functions</h2>  -<div class="sectionbody">  -<div class="ulist"><ul>  -<li>  -<p>  -Life cycle  -</p>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>strbuf_init</code>  -</dt>  -<dd>  -<p>  - Initialize the structure. The second parameter can be zero or a bigger  - number to allocate memory, in case you want to prevent further reallocs.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_release</code>  -</dt>  -<dd>  -<p>  - Release a string buffer and the memory it used. You should not use the  - string buffer after using this function, unless you initialize it again.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_detach</code>  -</dt>  -<dd>  -<p>  - Detach the string from the strbuf and returns it; you now own the  - storage the string occupies and it is your responsibility from then on  - to release it with <code>free(3)</code> when you are done with it.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_attach</code>  -</dt>  -<dd>  -<p>  - Attach a string to a buffer. You should specify the string to attach,  - the current length of the string and the amount of allocated memory.  - The amount must be larger than the string length, because the string you  - pass is supposed to be a NUL-terminated string. This string <em>must</em> be  - malloc()ed, and after attaching, the pointer cannot be relied upon  - anymore, and neither be free()d directly.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_swap</code>  -</dt>  -<dd>  -<p>  - Swap the contents of two string buffers.  -</p>  -</dd>  -</dl></div>  -</li>  -<li>  -<p>  -Related to the size of the buffer  -</p>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>strbuf_avail</code>  -</dt>  -<dd>  -<p>  - Determine the amount of allocated but unused memory.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_grow</code>  -</dt>  -<dd>  -<p>  - Ensure that at least this amount of unused memory is available after  - <code>len</code>. This is used when you know a typical size for what you will add  - and want to avoid repetitive automatic resizing of the underlying buffer.  - This is never a needed operation, but can be critical for performance in  - some cases.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_setlen</code>  -</dt>  -<dd>  -<p>  - Set the length of the buffer to a given value. This function does <strong>not</strong>  - allocate new memory, so you should not perform a <code>strbuf_setlen()</code> to a  - length that is larger than <code>len + strbuf_avail()</code>. <code>strbuf_setlen()</code> is  - just meant as a <em>please fix invariants from this strbuf I just messed  - with</em>.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_reset</code>  -</dt>  -<dd>  -<p>  - Empty the buffer by setting the size of it to zero.  -</p>  -</dd>  -</dl></div>  -</li>  -<li>  -<p>  -Related to the contents of the buffer  -</p>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>strbuf_trim</code>  -</dt>  -<dd>  -<p>  - Strip whitespace from the beginning and end of a string.  - Equivalent to performing <code>strbuf_rtrim()</code> followed by <code>strbuf_ltrim()</code>.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_rtrim</code>  -</dt>  -<dd>  -<p>  - Strip whitespace from the end of a string.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_ltrim</code>  -</dt>  -<dd>  -<p>  - Strip whitespace from the beginning of a string.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_reencode</code>  -</dt>  -<dd>  -<p>  - Replace the contents of the strbuf with a reencoded form. Returns -1  - on error, 0 on success.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_tolower</code>  -</dt>  -<dd>  -<p>  - Lowercase each character in the buffer using <code>tolower</code>.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_cmp</code>  -</dt>  -<dd>  -<p>  - Compare two buffers. Returns an integer less than, equal to, or greater  - than zero if the first buffer is found, respectively, to be less than,  - to match, or be greater than the second buffer.  -</p>  -</dd>  -</dl></div>  -</li>  -<li>  -<p>  -Adding data to the buffer  -</p>  -</li>  -</ul></div>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Note</div>  -</td>  -<td class="content">All of the functions in this section will grow the buffer as necessary.  -If they fail for some reason other than memory shortage and the buffer hadn&#8217;t  -been allocated before (i.e. the <code>struct strbuf</code> was set to <code>STRBUF_INIT</code>),  -then they will free() it.</td>  -</tr></table>  -</div>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>strbuf_addch</code>  -</dt>  -<dd>  -<p>  - Add a single character to the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_addchars</code>  -</dt>  -<dd>  -<p>  - Add a character the specified number of times to the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_insert</code>  -</dt>  -<dd>  -<p>  - Insert data to the given position of the buffer. The remaining contents  - will be shifted, not overwritten.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_remove</code>  -</dt>  -<dd>  -<p>  - Remove given amount of data from a given position of the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_splice</code>  -</dt>  -<dd>  -<p>  - Remove the bytes between <code>pos..pos+len</code> and replace it with the given  - data.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_add_commented_lines</code>  -</dt>  -<dd>  -<p>  - Add a NUL-terminated string to the buffer. Each line will be prepended  - by a comment character and a blank.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_add</code>  -</dt>  -<dd>  -<p>  - Add data of given length to the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_addstr</code>  -</dt>  -<dd>  -<p>  -Add a NUL-terminated string to the buffer.  -</p>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Note</div>  -</td>  -<td class="content">This function will <strong>always</strong> be implemented as an inline or a macro  -that expands to:</td>  -</tr></table>  -</div>  -<div class="listingblock">  -<div class="content">  -<pre><code>strbuf_add(..., s, strlen(s));</code></pre>  -</div></div>  -<div class="paragraph"><p>Meaning that this is efficient to write things like:</p></div>  -<div class="listingblock">  -<div class="content">  -<pre><code>strbuf_addstr(sb, "immediate string");</code></pre>  -</div></div>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_addbuf</code>  -</dt>  -<dd>  -<p>  - Copy the contents of another buffer at the end of the current one.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_adddup</code>  -</dt>  -<dd>  -<p>  - Copy part of the buffer from a given position till a given length to the  - end of the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_expand</code>  -</dt>  -<dd>  -<p>  - This function can be used to expand a format string containing  - placeholders. To that end, it parses the string and calls the specified  - function for every percent sign found.  -</p>  -<div class="paragraph"><p>The callback function is given a pointer to the character after the <code>%</code>  -and a pointer to the struct strbuf. It is expected to add the expanded  -version of the placeholder to the strbuf, e.g. to add a newline  -character if the letter <code>n</code> appears after a <code>%</code>. The function returns  -the length of the placeholder recognized and <code>strbuf_expand()</code> skips  -over it.</p></div>  -<div class="paragraph"><p>The format <code>%%</code> is automatically expanded to a single <code>%</code> as a quoting  -mechanism; callers do not need to handle the <code>%</code> placeholder themselves,  -and the callback function will not be invoked for this placeholder.</p></div>  -<div class="paragraph"><p>All other characters (non-percent and not skipped ones) are copied  -verbatim to the strbuf. If the callback returned zero, meaning that the  -placeholder is unknown, then the percent sign is copied, too.</p></div>  -<div class="paragraph"><p>In order to facilitate caching and to make it possible to give  -parameters to the callback, <code>strbuf_expand()</code> passes a context pointer,  -which can be used by the programmer of the callback as she sees fit.</p></div>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_expand_dict_cb</code>  -</dt>  -<dd>  -<p>  - Used as callback for <code>strbuf_expand()</code>, expects an array of  - struct strbuf_expand_dict_entry as context, i.e. pairs of  - placeholder and replacement string. The array needs to be  - terminated by an entry with placeholder set to NULL.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_addbuf_percentquote</code>  -</dt>  -<dd>  -<p>  - Append the contents of one strbuf to another, quoting any  - percent signs ("%") into double-percents ("%%") in the  - destination. This is useful for literal data to be fed to either  - strbuf_expand or to the *printf family of functions.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_humanise_bytes</code>  -</dt>  -<dd>  -<p>  - Append the given byte size as a human-readable string (i.e. 12.23 KiB,  - 3.50 MiB).  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_addf</code>  -</dt>  -<dd>  -<p>  - Add a formatted string to the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_commented_addf</code>  -</dt>  -<dd>  -<p>  - Add a formatted string prepended by a comment character and a  - blank to the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_fread</code>  -</dt>  -<dd>  -<p>  - Read a given size of data from a FILE* pointer to the buffer.  -</p>  -<div class="admonitionblock">  -<table><tr>  -<td class="icon">  -<div class="title">Note</div>  -</td>  -<td class="content">The buffer is rewound if the read fails. If -1 is returned,  -<code>errno</code> must be consulted, like you would do for <code>read(3)</code>.  -<code>strbuf_read()</code>, <code>strbuf_read_file()</code> and <code>strbuf_getline()</code> has the  -same behaviour as well.</td>  -</tr></table>  -</div>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_read</code>  -</dt>  -<dd>  -<p>  - Read the contents of a given file descriptor. The third argument can be  - used to give a hint about the file size, to avoid reallocs.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_read_file</code>  -</dt>  -<dd>  -<p>  - Read the contents of a file, specified by its path. The third argument  - can be used to give a hint about the file size, to avoid reallocs.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_readlink</code>  -</dt>  -<dd>  -<p>  - Read the target of a symbolic link, specified by its path. The third  - argument can be used to give a hint about the size, to avoid reallocs.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_getline</code>  -</dt>  -<dd>  -<p>  - Read a line from a FILE *, overwriting the existing contents  - of the strbuf. The second argument specifies the line  - terminator character, typically <code>'\n'</code>.  - Reading stops after the terminator or at EOF. The terminator  - is removed from the buffer before returning. Returns 0 unless  - there was nothing left before EOF, in which case it returns <code>EOF</code>.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_getwholeline</code>  -</dt>  -<dd>  -<p>  - Like <code>strbuf_getline</code>, but keeps the trailing terminator (if  - any) in the buffer.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_getwholeline_fd</code>  -</dt>  -<dd>  -<p>  - Like <code>strbuf_getwholeline</code>, but operates on a file descriptor.  - It reads one character at a time, so it is very slow. Do not  - use it unless you need the correct position in the file  - descriptor.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_getcwd</code>  -</dt>  -<dd>  -<p>  - Set the buffer to the path of the current working directory.  -</p>  -</dd>  -</dl></div>  -<div class="paragraph"><p><code>strbuf_add_absolute_path</code></p></div>  -<div class="literalblock">  -<div class="content">  -<pre><code>Add a path to a buffer, converting a relative path to an  -absolute one in the process. Symbolic links are not  -resolved.</code></pre>  -</div></div>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>stripspace</code>  -</dt>  -<dd>  -<p>  - Strip whitespace from a buffer. The second parameter controls if  - comments are considered contents to be removed or not.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_split_buf</code>  -</dt>  -<dt class="hdlist1">  -<code>strbuf_split_str</code>  -</dt>  -<dt class="hdlist1">  -<code>strbuf_split_max</code>  -</dt>  -<dt class="hdlist1">  -<code>strbuf_split</code>  -</dt>  -<dd>  -<p>  - Split a string or strbuf into a list of strbufs at a specified  - terminator character. The returned substrings include the  - terminator characters. Some of these functions take a <code>max</code>  - parameter, which, if positive, limits the output to that  - number of substrings.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>strbuf_list_free</code>  -</dt>  -<dd>  -<p>  - Free a list of strbufs (for example, the return values of the  - <code>strbuf_split()</code> functions).  -</p>  -</dd>  -<dt class="hdlist1">  -<code>launch_editor</code>  -</dt>  -<dd>  -<p>  - Launch the user preferred editor to edit a file and fill the buffer  - with the file&#8217;s contents upon the user completing their editing. The  - third argument can be used to set the environment which the editor is  - run in. If the buffer is NULL the editor is launched as usual but the  - file&#8217;s contents are not read into the buffer upon completion.  -</p>  -</dd>  -</dl></div>  -</div>  -</div>  -</div>  -<div id="footnotes"><hr /></div>  -<div id="footer">  -<div id="footer-text">  -Last updated 2014-09-19 15:32:09 PDT  -</div>  -</div>  -</body>  -</html>  
diff --git a/user-manual.html b/user-manual.html index 100171b..41c93ac 100644 --- a/user-manual.html +++ b/user-manual.html 
@@ -1,5 +1,5 @@  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idp50296176"></a>Git User Manual</h2></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#repositories-and-branches">Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="section"><a href="#exploring-git-history">Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#Developing-With-git">Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development">Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#cleaning-up-history">Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="section"><a href="#advanced-branch-management">Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="section"><a href="#git-concepts">Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="section"><a href="#submodules">Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="section"><a href="#low-level-operations">Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="section"><a href="#hacking-git">Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="section"><a href="#glossary">Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User Manual</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idp50297904"></a>Git User Manual</h2></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#repositories-and-branches">Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a Git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="section"><a href="#exploring-git-history">Exploring Git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#Developing-With-git">Developing with Git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling Git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development">Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public Git repositories</a></span></dt><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt></dl></dd><dt><span class="section"><a href="#cleaning-up-history">Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#interactive-rebase">Using interactive rebases</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="section"><a href="#advanced-branch-management">Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="section"><a href="#git-concepts">Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="section"><a href="#submodules">Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="section"><a href="#low-level-operations">Low-level Git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="section"><a href="#hacking-git">Hacking Git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="section"><a href="#glossary">Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX  command-line skills, but no previous knowledge of Git.</p><p><a class="xref" href="#repositories-and-branches" title="Repositories and Branches">the section called “Repositories and Branches”</a> and <a class="xref" href="#exploring-git-history" title="Exploring Git history">the section called “Exploring Git history”</a> explain how  to fetch and study a project using git—read these chapters to learn how  to build and test a particular version of a software project, search for